﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
namespace GloberoSport.Negocio
{
    [Serializable]
    public class TrackPoint
    {
        #region CAMPOS
        private int _id;
        private int _trackId;
        private int _indice;
        private decimal _lat;
        private decimal _lon;
        private decimal _altitud;
        private decimal _velocidad;
        private DateTime _fecha;
        private decimal _ref_xOrigen;
        private decimal _ref_xPrev;
        private int _ref_tsOrigen;
        private int _ref_tsPrev;
        private decimal _ref_desnPrev;
        private string _estado;
        private int _estadoCont;
        private decimal _distanciaAcumulada;
        private decimal _alturaTratada;
        #endregion

        #region PROPIEDADES
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        public int TrackId
        {
            get { return _trackId; }
            set { _trackId = value; }
        }
        public int Indice
        {
            get { return _indice; }
            set { _indice = value; }
        }
        public decimal Lat
        {
            get { return _lat; }
            set { _lat = value; }
        }
        public decimal Lon
        {
            get { return _lon; }
            set { _lon = value; }
        }
        public decimal Altitud
        {
            get { return _altitud; }
            set { _altitud = value; }
        }
        public decimal Velocidad
        {
            get { return _velocidad; }
            set { _velocidad = value; }
        }
        public DateTime Fecha
        {
            get { return _fecha; }
            set { _fecha = value; }
        }
        public decimal Ref_xOrigen
        {
            get { return _ref_xOrigen; }
            set { _ref_xOrigen = value; }
        }
        public decimal Ref_xPrev
        {
            get { return _ref_xPrev; }
            set { _ref_xPrev = value; }
        }
        public int Ref_tsOrigen
        {
            get { return _ref_tsOrigen; }
            set { _ref_tsOrigen = value; }
        }
        public int Ref_tsPrev
        {
            get { return _ref_tsPrev; }
            set { _ref_tsPrev = value; }
        }
        public decimal Ref_desnPrev
        {
            get { return _ref_desnPrev; }
            set { _ref_desnPrev = value; }
        }
        public string Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }
        public int EstadoCont
        {
            get { return _estadoCont; }
            set { _estadoCont = value; }
        }
        public decimal DistanciaAcumulada
        {
            get { return _distanciaAcumulada; }
            set { _distanciaAcumulada = value; }
        }
        public decimal AlturaTratada
        {
            get { return _alturaTratada; }
            set { _alturaTratada = value; }
        }
        #endregion

        #region CONSTRUCTORES
        public TrackPoint()
        {
            _id = -1;
            _estado = "FLAT";
            _estadoCont = 0;
        }
        public TrackPoint(DataRow dr)
        {
            _id = Utilidades.obtenerDatoInt(dr, "Id");
            _trackId = Utilidades.obtenerDatoInt(dr, "TrackId");
            _indice = Utilidades.obtenerDatoInt(dr, "Indice");
            _lat = Utilidades.obtenerDatoDecimal(dr, "Lat");
            _lon = Utilidades.obtenerDatoDecimal(dr, "Lon");
            _altitud = Utilidades.obtenerDatoDecimal(dr, "Alt");
            _velocidad = Utilidades.obtenerDatoDecimal(dr, "Vel");
            _fecha = Utilidades.obtenerDatoDateTime(dr, "Fecha");
            _ref_xOrigen = Utilidades.obtenerDatoDecimal(dr, "XOrigen");
            _ref_xPrev = Utilidades.obtenerDatoDecimal(dr, "XPrev");
            _ref_tsOrigen = Utilidades.obtenerDatoInt(dr, "TsOrigen");
            _ref_tsPrev = Utilidades.obtenerDatoInt(dr, "TsPrev");
            _ref_tsPrev = Utilidades.obtenerDatoInt(dr, "TsPrev");
            _ref_desnPrev = Utilidades.obtenerDatoDecimal(dr, "DesnPrev");
            _distanciaAcumulada = decimal.Parse(_ref_xOrigen.ToString("#0.00"));
            _alturaTratada = _altitud - 54;

        }
        #endregion

        #region METODOS DE CLASE
        public int guardar()
        {
            int iRet = -1;
            if (Id == -1)
            {
                iRet = Datos.TrackPoint.insertar(_trackId, _indice, _lat, _lon, _altitud, _velocidad, _fecha, _ref_xOrigen, _ref_xPrev, _ref_tsOrigen, _ref_tsPrev, _ref_desnPrev, _estado, _estadoCont);
            }
            else
            {
                //iRet = Datos.TrackPoint.insertar(_trackId, _indice, _lat, _lon, _altitud, _velocidad, _fecha, _ref_xOrigen, _ref_xPrev, _ref_tsOrigen, _ref_tsPrev, _ref_desnPrev);
            }
            return iRet;
        }
        #endregion

        #region METODOS ESTÁTICOS DE CLASE
        public static List<TrackPoint> obtenerTrackPoints(int idTrack)
        {
            List<TrackPoint> lista = new List<TrackPoint>();
            DataTable dt = Datos.TrackPoint.buscar(idTrack);
            foreach (DataRow dr in dt.Rows)
            {
                try
                {
                    lista.Add(new TrackPoint(dr));
                }
                catch (Exception ex)
                {
                }
            }

            return lista;
        }
        #endregion
    }
}

